# -*- coding: utf-8 -*-
import subprocess

class Muokkaaja(object):
    def __init__(self):
        pass

    def kasittele(self, teksti):
        return teksti


class ShellSkripti(Muokkaaja):
    def __init__(self, komento):
        self.komento = komento
        self.hakemisto = "./skriptit"

    def kasittele(self, teksti):
        """
        Ajaa skriptin ja syöttää sille `tekstin`. Palauttaa tuloksen.

        Paluttaa None, jos skriptin ajaminen epäonnistui. Jos skriptin ajaminen tuotti virheilmoituksia, 
        mutta prosessi ei palauta virhekoodia, oletetaan, että kyseessä ei ollut vakava virhe.
        """
        p = subprocess.Popen([self.komento], cwd=self.hakemisto, stdin=subprocess.PIPE, \
                                 stdout=subprocess.PIPE, stderr=subprocess.PIPE)
        out, err = p.communicate(teksti.encode("utf-8"))
        if err:
            def f(s, t): return s + u"{0}: {1}\n".format(self.komento, t)
            print u"Käsittelyssä oli virheitä:\n" + reduce(f, (err.decode("utf-8").splitlines()), "")
            if p.returncode:
                return None
        return out.decode("utf-8")


if __name__ == "__main__":
    sh = ShellSkripti("./testi.awk")
    print sh.kasittele(u"""
Banaani kasvaa
Ruotsissa ja on 
erittain mehevä
kasvi. Jos 
kuitenkin Ruotsiin 
mennaan ei saada 
banaaneja.
""")
